#include"mpls.h"

#include"ip.h"

MPLSHeader_t *mpls_header;

void init_mpls(FILE *fp){
    mpls_header = (MPLSHeader_t *)malloc(sizeof(MPLSHeader_t));
    memset(mpls_header,0,sizeof(MPLSHeader_t));
    if (fread(mpls_header, sizeof(MPLSHeader_t), 1, fp) != 1)
    {
        printf(" can not read mpls_header\n");
    }
}

//用于判断是否是最后一个mpls
//此处使用位段，会解析错误
int get_S(){
     return ntohl(mpls_header->LabelExpSTTL)&1<<8;
}

void process_mpls(FILE *fp){
    init_mpls(fp); 
    printf("MPLS....\n"); 
    while(!get_S()){  // 处理完所有的MPLS
        printf("MPLS....\n"); 
        init_mpls(fp);
    }

    //一般mpls之后是ip
    process_ip(fp);

    free_mpls();
}

void free_mpls(){
    free(mpls_header);
}